package com.hjqjl.common_lib.utils;

import android.view.LayoutInflater;

import androidx.viewbinding.ViewBinding;

import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

public class ViewBindingCreator {
    @SuppressWarnings("unchecked")
    public static <VB extends ViewBinding> VB createViewBinding(Class targetClass, LayoutInflater layoutInflater) {
        //返回当前类的父类的type，也就是ComLibActivity
        Type type = targetClass.getGenericSuperclass();

        if (type instanceof ParameterizedType) {
            //如果支持泛型
            try {

                //获得泛型中的实际类型，可能会存在多个泛型，[0]也就是获得VB的type
                Class<VB> clazz = (Class<VB>) ((ParameterizedType) type).getActualTypeArguments()[0];
                //反射inflate
                Method method = clazz.getMethod("inflate", LayoutInflater.class);
                //方法调用，获得viewBinding实例
                return (VB) method.invoke(null, layoutInflater);

//                Type[] types = ((ParameterizedType) type).getActualTypeArguments();
//                for (Type type1 : types) {
//                    if (type1.getTypeName().endsWith("Binding")) {//getTypeName需要API28以上
//                        //反射inflate
//                        Method method = ((Class<VB>) type1).getMethod("inflate", LayoutInflater.class);
//                        //方法调用，获得viewBinding实例
//                        return (VB) method.invoke(null, layoutInflater);
//                    }
//                }

            } catch (Exception e) {
                e.printStackTrace();
                throw new RuntimeException("create createViewBinding error");
            }
        }
        return null;
    }
}
